<template>
  <view>
    <button
      open-type="getUserInfo"
      @getuserinfo="getUserByBtn"
      type="primary"
    >微信登录</button>
  </view>
</template>

<script>
export default {
  onLoad() {
    // console.warn('警告：error!')
    // this.getUserByJs()
    // code参数=》说明：获取用户信息之前调用=》避免异常
    this.getCode()
  },
  methods: {
    // 通过button组件获取(推荐)
    getUserByBtn(e) {
      console.log('用户加密信息：', e.detail)
      // 调用后台接口方法=》微信登录=》获取token
      this.login(e.detail)
    },
    // 获取微信登录凭证code参数
    async getCode() {
      const [error, data] = await uni.login()
      if (!error) {
        console.log(data)
        // code参数存储到this
        this.code = data.code
      }
    },
    // 登录后台接口
    async login(user) {
      // console.log(user)    
      // 其它参数
      const { encryptedData, iv, rawData, signature } = user;
      // 调用登录接口获取token
      const { data } = await this.request({
        url: '/api/public/v1/users/wxlogin',
        method: 'POST',
        data: {
          code: this.code,
          encryptedData, iv, rawData, signature
        }
      })
      console.log(data)
      /**
       * 1. 获取到token存储到本地
       * 2. 返回上次访问页面
       */
      uni.setStorageSync('hm-token', data.token)
      uni.showToast({
        title: '登录成功',
        duration: 2000,
        success() {
          uni.navigateBack()
        }
      });

    },
    //  通过js获取登录参数
    async getUserByJs() {
      // 获取用户授权的信息
      const [serror, set] = await uni.getSetting()
      if (!serror) {
        console.log('用户授权信息：', set)
        // 判断是否授权获取用户加密信息
        if (set.authSetting['scope.userInfo']) {
          const [error, user] = await uni.getUserInfo()
          if (!error) {
            console.log(user)
          }
        }
      }

    }
  },
}
</script>

<style lang="scss" scoped>
button {
  width: 600rpx;
  margin: 200rpx auto 0;
}
</style>